package primary.array;

/**
 * @Author Elephas
 * @Date 2022/1/7
 **/
/*
给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像，这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

 */
public class Rotate {

    public static void main(String[] args) {
        final int[][] test01 = new int[][]{{5,1,9,11}, {2, 4, 8, 10},{13, 3, 6, 7}, {15, 14, 12, 16}};
        final int[][] test02 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
        final int[][] test03 = new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
        rotate(test03);

    }
    /*
        解法一：将矩阵转置，然后将矩阵的列向量逆序；或者将矩阵按行逆序后再转置。
                矩阵转置需要注意边界条件，调了半天
     */
    public static void rotate(int[][] matrix){
        // 按行逆序
        for (int i = 0; i < matrix.length/2; i++) {
            int[] temp = matrix[i];
            matrix[i] = matrix[matrix.length-i-1];
            matrix[matrix.length-i-1]=temp;
        }
        // 矩阵转置
        for (int i = 0; i < matrix.length; i++) {
            for (int j = i+1; j < matrix.length; j++) {
                int temp2 = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp2;
            }
        }
        return;
    }


}
